Que es un Rainbow Cracking Attack

rainbow-table-example

Cuando nos registramos en una página web, en una aplicación móvil, la aplicación de tu proveedor financiero, cualquier servicio que requiera un correo y una contraseña tiene que ser almacenado en algún lugar, las empresas tienen distintos métodos de guardar tu información, y una de ellas, probablemente la más usada hasta ahora seria guardar toda esa información sensible en una base de datos, ¿Qué es una base de datos? Una base de datos es una tabla de registros en la cual es almacenada tu información. Las contraseñas por lo general no son guardadas como tu mismo las escribes en tu formulario es decir en texto plano, si no que se implementa un tipo de cifrado computado para que el usuario común sea casi imposible descifrarlo, sin embargo, una computadora si tiene la posibilidad de hacerlo, y los cibercriminales saben cómo hacerlo, y entre una de sus técnicas se encuentra la técnica rainbow crackng hash basada en tabla.

¿Que es un Hash?

Un hash en un algoritmo matemático que computa una serie de datos para transformarlo en una nueva cadena de caracteres, cabe recalcar que esta longitud de caracteres dependiendo del hash o método de encriptación es siempre fija, es decir que tanto encriptar el carácter ‘a’ como encriptar toda una tesis dará el mismo resultado o longitud de caracteres, ahora bien, existen muchos métodos de encriptación, algunas mas inseguras que otras, sin embargo en los sistemas informáticos es más común oír de las siguientes:

  • MD5

  • Este método de encriptación de 128 bits es utilizado ampliamente para verificar la autenticidad de un archivo es decir que crea una firma digital para evitar la piratería de archivos modificados o con virus informáticos, aunque este método de encriptación tenga 2^128 de posibles combinaciones, se ha encontrado varios fallos de hash collision esto significa que 2 entradas pueden generar el mismo hash y crear un fallo de seguridad, lo que ha llevado a ser fácilmente vulnerable a ataques de probabilidad, como el birthday attack.

    hash collision wikipedia

    Podemos calcular fácilmente la firma criptográfica de un archivo con la herramienta md5sum implementada en sistemas operativos Unix, tambien podemos crear un hash con un lenguaje de scripting.

  • SHA-1

  • SHA o Secure hash Algorithm es una serie de funciones criptográficas desarrolladas por la NSA (National Security Agency) y por la NIST, fueron pensadas para solucionar los problemas de colisión de hash, utilizando su capacidad de no reflexividad es decir que dada una cadena de bits, no es posible tener duplicaciones de salida, sin embargo, en la actualidad se han encontrado varias vulnerabilidades que han hecho que organizaciones dejaran de utilizarlo, en 2004 criptográficos de China han demostrado comprometer la función en 2^69 operaciones y en 2017 se logró crear la primera colisión de SHA1, el equipo de Google y CWI Institute llamada SHAttered, la cual logro crear la colisión en 9 quintillones de cálculos SHA1, 100,000 veces más rápido que la paradoja del ataque birthday, SHA-1 a diferencia de MD5 es una función criptográfica de una longitud de 160 bits, aun asi su uso se recomienda cambiar por alternativas mas seguras, como SHA-2 o SHA-3.

    sha-1 example
  • SHA-2

  • SHA-2 es un conjunto de funciones criptográficas desarrolladas por la NSA, (SHA-224, SHA-256, SHA-384, SHA-512) las cuales tienen como longitud en bits cada función como su nombre lo indica al final, es decir 224, 256, 384 y 512 bits, fueron pensadas para crear una opción más segura, después de las colisiones de hash producidas por su predecesora SHA-1, actualmente SHA-2 y SHA-1 son las tecnologías mas usadas por las organizaciones, pese a que en SHA-1 se encontraron dichas colisiones, aun no se ha llevado por completo el cambio de SHA-1 a SHA-2, sin embargo SHA-2 ya esta implementada en un gran número de aplicaciones y protocolos como SSL, TTL, SSH, etc. además se usan para verificar la autenticidad de los paquetes Debian de GNU/Linux entre otras aplicaciones.

Cracking de hash con Rainbow

Como pudimos observar un hash es un algoritmo computado matemáticamente para verificar firmas, o huellas digitales, verificar la autenticidad de un archivo o en la mayoría de los casos, para encriptar una contraseña en una base de datos, ahora bien, nosotros cuando insertamos una contraseña en texto plano, ya sea al registrarnos en un servicio, o al iniciar sesión en un servicio online, lo que sucede en el lado del servidor es que la contraseña introducida textualmente en el formulario, se envía directamente al servidor, y este servidor lo que hace es comparar la contraseña introducida a manera de hash con la de su base de datos, por supuesto tambien encriptada, y bien, si la contraseña introducida produce el mismo hash que se genero al registrarte en dicho servicio, entraras en tu cuenta exitosamente, ahora es comprensible porque los hashes no deben colisionar, ya que si llegara a pasar podrías insertar otra contraseña que no sea la que inicialmente te registraste y esto se llamaría colisión de hash, es como si otra persona pudiera desbloquear tus datos por que tiene tu misma huella dactilar, es por eso que en muchas bases de datos para agregar más seguridad a sus hashes, se aplica una técnica llamada salting que añade una pequeña diferencia al hash para que en caso de que caiga en manos de un atacante sea mucho más difícil desencriptarlo.

Un ataque de rainbow table o tabla arcoiris, es una de las maneras en que los ciberdelincuentes o los hackers éticos utilizan para desencriptar hashes, (con objetivos totalmente distintos claro), consiste en una tabla de valores de hashes pre-computados, es decir que ya han sido calculadas con sus valores correspondientes de caracteres, un atacante buscara en la tabla algún valor de hash que coincida con el correspondiente y asi obtener su contraseña. Si el valor hash de la contraseña desconocida coincide con uno de los valores hash de la tabla rainbow, puede determinar la contraseña correspondiente.

En base a esto podemos determinar que una rainbow table puede descifrar contraseñas que sean mas conocidas o que por lo menos estén dentro de su tabla precalculada es decir que es mucho más difícil encontrar una coincidencia con una contraseña robusta que con una entrada de contraseña básica como “1234” o “password” ya que estas en valor de hash podrían ser fácilmente vulnerables a ataques de tabla arcoíris, podríamos decir en este punto que el valor de entrada de un hash determina la dificultad de desencriptar el mismo. A continuación, algunos sitios web de tabla arcoíris online donde podrías probar contraseñas:

Para demostrar esto haremos una prueba con una contraseña y su valor de hash y trataremos de desencriptar el hash con un ataque de tabla arcoíris para ello iremos a un conversor de texto plano a SHA-1 www.sha1-online.com y después lo trataremos de desencriptar en crackstation.net

sha1-online website example

En este caso hemos convertido la cadena de texto “passwordsecret” en un hash y nos ha computado este hash de salida entonces el hash de “passwordsecret” seria a6a818514ef11592386d6b0dc0d49b282a170d2f ahora trataremos de romperlo con un ataque de tabla arcoíris iremos a crackstation.net y introduciremos el hash correspondiente, automáticamente crackstation.net conocerá que tipo es el hash y tratara de coincidir el hash que introduzcamos con su tabla de hashes pre-computada:

crackstation example
Como podemos observar la web fue capaz de encontrar una coincidencia de hash y nos ha logrado devolver el hash desencriptado en el apartado de resultados el cual es “passwordsecret”.

Esta es una de algunas técnicas que utilizan los cibercriminales y los hackers éticos para desencriptar hashes, existen otras tácticas que utilizan, ataques de fuerza bruta como el ataque de cumpleaños, ataques basados en diccionario, ataques de hash injection, entre otras. O si es en caso de recuperar tus contraseñas en plano podrían utilizar otras técnicas como phishing, ingeniería social, man-in-the-middle attack, o utilizar bases de datos de contraseñas simples vulneradas entre otras.

Mitigar un ataque Rainbow Table Attack

Como dijimos anteriormente un hash es una encriptación algorítmica que encripta cualquier tipo de dato, texto, o archivo, con funciones matemáticas, ahora bien como observamos anteriormente es fácil poder quebrantar hashes con técnicas como la tabla arcoíris si las contraseñas son muy sencillas y cortas, de nada serviría utilizar un algoritmo criptográfico sofisticado si nuestra contraseña es “1234”, es más importante determinar el valor de entrada de un hash antes que el tipo de encriptación, por lo que es recomendable utilizar contraseñas robustas en cualquier servicio o sitio online que requiera encriptación.
Ahora si lo que queremos es resguardar la integridad de los datos, si tenemos una base de datos de contraseñas, como anteriormente explicamos podemos utilizar la técnica de salt o salting la cual consiste en sumar un valor aleatorio de caracteres a un hash, asi, dificultando los ataques de tabla arcoíris, y los ataques tipo diccionario, tambien podemos utilizar métodos mucho más seguros como la función de derivación de claves, entre otras técnicas.

Uso de hashes en sistemas de autenticacion

El correcto funcionamiento y seguridad de la integridad de los datos de los usuarios debe ser de usted y de la empresa a la cual usted le confía sus datos, es por ello que además de usar contraseñas robustas, las empresas pueden optar por implementaciones seguras a sus sistemas de autenticación, organizaciones como OWASP proporcionan técnicas diferentes para el salting aplicado a sistemas de autenticación: Password Storage - OWASP Cheat Sheet Series, tambien existe información acerca de la correcta encriptación de contraseñas con métodos SALT en sistemas ASP.NET proporcionado por Microsoft Hash passwords in ASP.NET Core | Microsoft Learn.